import fs from 'fs/promises';
import path from 'path';

/**
 * 将小说保存为TXT文件
 * @param {Object} novel 小说对象
 * @param {string} novel.title 小说标题
 * @param {string} novel.author 作者
 * @param {Array<{title: string, content: string}>} novel.chapters 章节列表
 * @param {string} outputPath 输出文件路径
 */
export async function saveNovelToFile(novel, outputPath) {
    try {
        // 确保输出目录存在，并设置权限
        const outputDir = path.dirname(outputPath);
        await fs.mkdir(outputDir, { recursive: true, mode: 0o777 });

        // 构建小说内容
        const content = [];

        // 添加小说信息
        content.push(`《${novel.title}》`);
        content.push(`作者：${novel.author}`);
        content.push('\n');  // 空行分隔

        // 添加章节内容
        for (const chapter of novel.chapters) {
            content.push(chapter.title);
            content.push('='.repeat(40));  // 分隔线
            content.push(chapter.content);
            content.push('\n');  // 章节间空行
        }

        // 写入文件，并设置权限
        await fs.writeFile(outputPath, content.join('\n'), {
            encoding: 'utf8',
            mode: 0o666  // 设置文件权限为可读写
        });

        // 获取文件大小
        const stats = await fs.stat(outputPath);
        const fileSizeInMB = (stats.size / (1024 * 1024)).toFixed(2);

        console.log(`文件保存成功！`);
        console.log(`- 路径: ${outputPath}`);
        console.log(`- 大小: ${fileSizeInMB}MB`);
        console.log(`- 章节数: ${novel.chapters.length}`);

    } catch (error) {
        throw new Error(`保存文件失败: ${error.message}`);
    }
}

/**
 * 检查文件是否存在
 * @param {string} filePath 文件路径
 * @returns {Promise<boolean>} 是否存在
 */
export async function fileExists(filePath) {
    try {
        await fs.access(filePath);
        return true;
    } catch {
        return false;
    }
}

/**
 * 确保目录存在
 * @param {string} dirPath 目录路径
 */
export async function ensureDir(dirPath) {
    try {
        await fs.mkdir(dirPath, { recursive: true });
    } catch (error) {
        if (error.code !== 'EEXIST') {
            throw error;
        }
    }
}